package com.kdg.juc;

import java.util.HashMap;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * Created by Kong on 2017/7/21.
 * 原子变量：java.util.Concurrent包括了常用的原子变量
 *          1.voiatile保证内存可见性
 *          2.CAS（Compare-and-Swap）算法保证数据原子性共享数据的支持
 *
 * CAS算法也是同步的  共享数据只能单线程访问  但是效率比同步锁高  因为线程操作失败时它不会放弃CPU分配给他的执行权，会接着尝试
 *
 */
public class TestAtomicDemo {
    public static void main(String[] args) {
        AtomicDemo ad = new AtomicDemo();
        for (int i=0;i<10;i++){
            new Thread(ad).start();
        }
    }
}

class AtomicDemo implements Runnable{
//    private int number = 0;
    private AtomicInteger number = new AtomicInteger(0);
    @Override
    public void run() {
        try {
            Thread.sleep(200);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(getNumber());//Thread.currentThread().getName()+":"+
    }

    public int getNumber() {
        return number.getAndIncrement();
    }

}